【MySQL】DISTINCT - 重複データの除外

【MySQL】DISTINCT - 重複データの除外

MySQLのDISTINCTについて解説します。

検証環境

DISTINCT

DISTINCT句は“SELECT文の取得レコード(データ)の重複データを除外する句”です。

全ての取得カラムの値が同じレコードを重複とみなすため、一部の値のみ同じレコードは除外されません。

基本構文

SELECT DISTINCT カラム FROM テーブル

DISTINCTSELECTの次に記述します。

サンプル

mysql> SELECT * FROM items;
+----+-----------+-------+-------+
| id | name      | price | stock |
+----+-----------+-------+-------+
| 1  | Apple     |   200 |    10 |
| 2  | Orange    |   150 |     3 |
| 3  | Apple     |   300 |     5 |
| 4  | Pineapple |  1100 |     1 |
| 5  | Grapes    |  3500 |     1 |
| 6  | Pineapple |  2000 |     3 |
| 7  | Apple     |   300 |     5 |
+----+-----------+-------+-------+
7 rows in set (0.00 sec)

___ih_hl_start
mysql> SELECT DISTINCT name FROM items;
___ih_hl_end
+-----------+
| name      |
+-----------+
| Apple     |
| Orange    |
| Pineapple |
| Grapes    |
+-----------+
4 rows in set (0.00 sec)

15行目がDISTICT句を使ったSELECT文です。

itemsテーブルのnameカラムは値の重複(Appleなど)がありますが、DISTINCT句によって重複が除外されます。

また、DISTINCT句は全ての取得カラムの値が重複する場合のみ除外します。

___ih_hl_start
mysql> SELECT DISTINCT name, price FROM items;
___ih_hl_end
+-----------+-------+
| name      | price |
+-----------+-------+
| Apple     |   200 |
| Orange    |   150 |
| Apple     |   300 |
| Pineapple |  1100 |
| Grapes    |  3500 |
| Pineapple |  2000 |
+-----------+-------+
6 rows in set (0.00 sec)

この場合、クエリ結果からidカラムが37のレコードのみが重複するとみなされたことが分かります。